// 该函数是使用文件选择构件在图形界面中选择一个文件，并在终端中输出选中文件的完整路径实例，
// 其通常会用于实现文件管理对话框，入“打开”、“保存”、“另存为”等。
/* 该应用代码构造了一个OpenFile函数，用于对“打开文件”事件进行处理，使用g_printf函数在终端中输出了当前选中的文件信息，而该函数
 * 在按钮的回调函数中被调用*/

#include <gtk/gtk.h>

GtkWidget *FileSelection;	// 文件选择构件

// 在终端输出当前选择的文件名称
void OpenFile(GtkWidget *widget,gpointer *data){
	g_print("%s\n",gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSelection)));
}

// 按键处理函数
void button_deal(GtkWidget *widget, gpointer *data){
	// 创建文件选择构件
	FileSelection = gtk_file_selection_new("选择文件");
	gtk_file_selection_set_filename(GTK_FILE_SELECTION(FileSelection),"*.txt");
	gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->ok_button),"clicked",GTK_SIGNAL_FUNC(OpenFile),NULL);

	// 捕捉打开按钮的“clicked”信号
	gtk_widget_show(FileSelection);
}

int main(int argc, char *argv[]){
	GtkWidget *window,*button;

	gtk_init(&argc,&argv);
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"Selection_File_Test");
	gtk_widget_set_usize(window,200,200);
	gtk_widget_set_uposition(window,200,200);
	gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

	button = gtk_button_new_with_label("打开文件");
	gtk_container_add(GTK_CONTAINER(window),button);
	gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(button_deal),NULL);

	gtk_widget_show(button);
	gtk_widget_show(window);
	gtk_main();

	return 0;
}

